1. Field of the Invention
This invention generally relates to communication systems and, more particularly, to a system and method for negotiating a forward error correction (FEC) algorithm where at least one link partner is optionally capable of transceiving messages with more than one FEC algorithm.
2. Description of the Related Art
As noted in Wikipedia, forward error correction (FEC) or channel coding is a system of error control for data transmission, whereby the sender adds systematically generated redundant data to its messages, also known as an error-correcting code. A carefully designed redundancy permits the receiver to detect and correct a limited number of errors occurring anywhere in the message without the need to ask the sender for additional data. FEC gives the receiver an ability to correct errors without needing a reverse channel to request retransmission of data, but this advantage is at the cost of a fixed higher forward channel bandwidth. FEC is therefore applied in situations where retransmissions are relatively costly, or impossible such as when broadcasting to multiple receivers.
FEC processing in a receiver may be applied to a digital bit stream or in the demodulation of a digitally modulated carrier. For the latter, FEC is an integral part of the initial analog-to-digital conversion in the receiver. The Viterbi decoder implements a soft-decision algorithm to demodulate digital data from an analog signal corrupted by noise. Many FEC coders can also generate a bit-error rate (BER) signal which can be used as feedback to fine-tune the analog receiving electronics. The maximum fractions of errors or of missing bits that can be corrected is determined by the design of the FEC code, so different forward error correcting codes are suitable for different conditions.
The two main categories of FEC codes are block codes and convolutional codes. Block codes work on fixed-size blocks (packets) of bits or symbols of predetermined size. Practical block codes can generally be decoded in polynomial time to their block length. Convolutional codes work on bit or symbol streams of arbitrary length. They are most often decoded with the Viterbi algorithm, though other algorithms are sometimes used. Viterbi decoding allows asymptotically optimal decoding efficiency with increasing constraint length of the convolutional code, but at the expense of exponentially increasing complexity. A convolutional code can be turned into a block code, if desired, by “tail-biting”.
There are many types of block codes, but among the classical ones the most notable is Reed-Solomon coding because of its widespread use on the Compact disc, the DVD, and in hard disk drives. Golay, BCH, Multidimensional parity, and Hamming codes are other examples of classical block codes. FEC codes may be concatenated for improved performance.
The following is a list of well known FEC codes:                BCH code;        Constant-weight code;        Convolutional code;        Group codes;        Golay codes; especially binary Golay;        Goppa code;        Hadamard code;        Hagelbarger code;        Hamming code;        Latin square based code for non-white noise;        Lexicographic code;        Long code;        Low-density parity-check code, also known as Gallager code;        LT code;        m of n codes;        Online code;        Raptor code;        Reed-Solomon code;        Reed-Muller code;        Repeat-accumulate code;        Repetition codes, such as Triple modular redundancy;        Tornado code;        Turbo code; and,        Walsh-Hadamard code.        
Many other related codes are proprietary to vendors. Thus, communicating devices, if made by different vendors for example, may not necessarily be able to communicate using a common FEC algorithm. As described in US 2008/0065960, a reserved field in an OTU2 frame header can be used by a transmitter to alert a receiver of the type of FEC algorithm being used by the transmitter. However, this method does not provide a means for the transmitter and receiver to negotiate on the subject of a common FEC algorithm. U.S. Pat. No. 7,555,214 describes a mechanism for turning an FEC algorithm on or off. However, no means is described for negotiating between a transmitter and receiver, to select a mutually beneficial FEC algorithm.
It would be advantageous if a streamlined process of auto-negotiation were developed that could account for devices capable of using multiple types of FEC algorithms.